home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 November / Macworld (1999-11).dmg / Updaters / WhiteCap 3.0.4 / WhiteCap Source.sit / WhiteCap Source / Common / General Tools / Messager.cpp < prev    next >
C/C++ Source or Header  |  1999-07-13  |  2KB  |  111 lines

  1. #include "Messager.h"
  2.  
  3.  
  4.  
  5.  
  6. XPtrList Messager::sAllMessagers;
  7.  
  8.  
  9. Messager::Messager() {
  10.     mAllowBroadcasting = true;
  11.     
  12.     sAllMessagers.Add( this );
  13.     StartListening();
  14. }
  15.  
  16.  
  17. Messager::~Messager() {
  18.     int            i = 1;
  19.     Messager*    msger;
  20.     
  21.     StopListening();
  22.     sAllMessagers.Remove( this );
  23.         
  24.     while ( mListeners.Fetch( i, (void**) &msger ) ) {
  25.         i++;
  26.         msger -> mListeners.Remove( this );
  27.     }
  28. }
  29.  
  30.  
  31.  
  32.  
  33.  
  34.         
  35. void Messager::BroadcastGlobalMessage( long inMsg, long inArgs[] ) {
  36.     Messager*    msger;
  37.     int            i = 1;
  38.     
  39.     while ( sAllMessagers.Fetch( i, (void**) &msger ) ) {
  40.         i++;
  41.         if ( msger -> IsListening() )
  42.             msger -> ListenToMsg( inMsg, inArgs );
  43.     }
  44. }
  45.  
  46.  
  47.  
  48.  
  49. void Messager::BroadcastMessage( long inMsg, long inArgs[] ) {
  50.     int            i = 1;
  51.     Messager*    msger;
  52.     
  53.     if ( mAllowBroadcasting && inMsg ) {
  54.         while ( mListeners.Fetch( i, (void**) &msger ) ) {
  55.             i++;
  56.             if ( msger -> IsListening() )
  57.                 msger -> ListenToMsg( inMsg, inArgs );
  58.         }
  59.     }
  60. }
  61.  
  62.  
  63. void Messager::StartListening() {
  64.     mIsListening = true;
  65. }
  66.  
  67.  
  68. void Messager::StopListening() {
  69.     mIsListening = false;
  70. }
  71.  
  72.  
  73.  
  74. void Messager::SetAllowBroadcasting( bool inAllowed ) {
  75.     mAllowBroadcasting = inAllowed;
  76. }
  77.  
  78.  
  79.  
  80. void Messager::AddListener( Messager* inListener ) {
  81.  
  82.     if ( inListener ) {
  83.         if ( mListeners.FindIndexOf( inListener ) == 0 ) {
  84.             mListeners.Add( inListener );
  85.             inListener -> mListeners.Add( this );
  86.         }
  87.     }
  88. }
  89.  
  90.  
  91.  
  92. void Messager::CopyListeners( Messager* inSource ) {
  93.     int i = 0;
  94.     Messager* msger;
  95.     
  96.     if ( inSource ) {
  97.         while ( inSource -> mListeners.Fetch( i, (void**) &msger ) ) {
  98.             i++;
  99.             AddListener( msger );
  100.         }
  101.     }
  102. }
  103.  
  104.  
  105.  
  106. bool Messager::ListenToMsg( long , long []  ) {
  107.     return false;
  108. }
  109.  
  110.  
  111.